package com.south.base.test.arithmetic;

import org.junit.Assert;
import org.junit.Test;

/**
 * @author Administrator
 * @date 2020/6/24 9:26
 */
public class DetectCapitalUse {
    /**
     * 检测大写字母
     * 给定一个单词，你需要判断单词的大写使用是否正确。
     * 我们定义，在以下情况时，单词的大写用法是正确的：
     * 全部字母都是大写，比如"USA"。
     * 单词中所有字母都不是大写，比如"leetcode"。
     * 如果单词不只含有一个字母，只有首字母大写， 比如 "Google"。
     */
    @Test
    public void detectCapitalUse() {
        Assert.assertTrue(detectCapitalUse("USA"));
        Assert.assertTrue(detectCapitalUse("usa"));
        Assert.assertTrue(detectCapitalUse("Usa"));
        Assert.assertTrue(detectCapitalUse("U"));
        Assert.assertFalse(detectCapitalUse("USsa"));
        Assert.assertFalse(detectCapitalUse("aU"));
    }

    public boolean detectCapitalUse(String word) {
        if (word.length() <= 1) {
            return true;
        }
        boolean f = word.charAt(0) < 'a', f2 = false, f3 = false;
        for (int i = 1; i < word.length(); i++) {
            if (word.charAt(i) - 'a' >= 0) {
                f2 = true;
            } else {
                f3 = true;
            }
        }
                // leetcode  Google
        return (f2 && !f3)
                // USA  U
                || (!f2 && f);
    }
}
